Newtype パターン
1 つのフィールドを持つタプル構造体を使って、型の不透明なラッパを作成する Rust Design Patterns の 1 つ
OOP における Value Object のようなものと解釈 radish-miyazaki.icon
これにより、型のエイリアスではなく新しい型が作成される
ただし、ランタイム上の追加の オーバーヘッド は発生しない(ゼロコスト抽象化)
クラスはランタイム時のオーバーヘッドが発生する
Scala に Opaque types が生まれたのもこれを避けるため
サンプルコード
code:rs
#derive(Debug, Clone, Copy)
pub struct BookId(uuid::Uuid)
impl BookId {
pub fn new() -> Self {
Self(uuid::Uuid::new_v4())
}
}
参考
https://rust-unofficial.github.io/patterns/patterns/behavioural/newtype.html
日本語訳: https://qiita.com/Yappii_111/items/654717e6a6a980722189#newtype
https://nossie531.github.io/rust_memo/newtype.xhtml